'''
装饰器:
  特点：
  1.函数A是作为参数出现的(函数B就接收函数A作为参数)
  2.要有闭包的特点
'''

# def test():
#     print('------------->test')
#
# def func(f):
#     print(f)
#     f()
#     print('------------------->func')
#
# func(test)

#定义一个装饰器
def decorate(func):
    a = 100
    print('打印外层测试----')
    def wrapper():
        func()
        print('---------->刷漆')
        print('---------->铺地板',a)
        print('---------->装门')
    print('wrapper加载完成...')
    return wrapper

#使用装饰器
'''
1.house被装饰函数
2.将被装饰函数作为参数传给装饰器decorate
3.执行decora函数
4.将返回值又赋值给house
'''
@decorate
def house():
    print('我是毛坯房.....')

print(house)
house()


#万能装饰器
import  time

def decorate(func):
    def wrapper(*args,**kwargs):
        func(*args,**kwargs)
        print('正在校验中...')
        time.sleep(2)
        print('校验完成！')
    return wrapper

@decorate
def func(n):
    print(n)

func(5)

@decorate
def func1(list1,**kwargs):
    for i in list1:
        print(i)
    print(kwargs)
list1 = ['lic',3,5]
func1(list1,b=2)




